# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：DouBanSpider
#   文件名：testRe.py
# 开发时间：2021/4/1 7:53

# 正则表达式:字符串模式(判断字符串是否符合一定的标准)
import re

# 创建模式对象,用来比对别人
pattern = re.compile('AA')  # 此处的AA是正则表达式,用来验证其他的字符串
print(type(pattern), pattern)
# <class 're.Pattern'> re.compile('AA')
# pattern就是模式对象
# result = pattern.search('ABCA')  # search字符串是被校验被比较的内容
# None
# result = pattern.search('ABCAA')  # search字符串是被校验被比较的内容
# <re.Match object; span=(3, 5), match='AA'>
# python是左闭右开区间,所以是(3,5),实际上是[3,5),就是[3,4]
result = pattern.search('ABCAADDCCAAA')  # 用search方法,进行比对查找
# <re.Match object; span=(3, 5), match='AA'>
# 匹配到的结果还是第一个
print(result)  # 显示匹配结果

# 没有模式对象
result = re.search('asd', 'Aasd')  # 用search方法,进行比对查找
# <re.Match object; span=(1, 4), match='asd'> # 前面的字符串是规则,后面的是被校验的对象
print(result)  # 显示匹配结果

# 查找所有匹配的字符串
print(re.findall('a', 'ASDaDFGAa'))  # 前面是规则,后面是被校验字符串
# ['a', 'a']  找到两个符合的字符串
print(re.findall('[A-Z]', 'ASDaDFGAa'))  # 前面是规则,后面是被校验字符串
# ['A', 'S', 'D', 'D', 'F', 'G', 'A']
print(re.findall('[A-Z]+', 'ASDaDFGAa'))  # 前面是规则,后面是被校验字符串
# ['ASD', 'DFGA'] 找到一个或多个组合,符合的就输出

# sub()  后面比较常用
print(re.sub('a', 'A', 'abcdcasd'))  # 在第三个字符串中,找到小a用大A替换
# 常用,比如将换行\n替换成空格,比如将,换成.等等

# 建议在正则表达式中,被比较的字符串前面加上r,就不用担心转义字符的问题
print(r'\abcd\ab')
# \abcd\ab